package cn.outsourcing.supermarket.service;

import cn.outsourcing.supermarket.common.CommonPage;
import cn.outsourcing.supermarket.common.PageResult;
import cn.outsourcing.supermarket.common.Result;
import cn.outsourcing.supermarket.dto.DeleteOrderDTO;
import cn.outsourcing.supermarket.dto.OrdersPageDTO;
import cn.outsourcing.supermarket.po.HiolabsOrder;
import cn.outsourcing.supermarket.vo.*;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * 服务类
 *
 * @author gzkemays
 * @since 2021-10-20
 */
public interface HiolabsOrderService extends IService<HiolabsOrder> {
  /**
   * 获取订单列表信息
   *
   * @param entity {@link OrdersPageDTO} 订单分页实体类
   * @return {@link Result} 返回结果
   */
  Result getOrderList(OrdersPageDTO entity);

  /**
   * 分页获取订单列表详情
   *
   * @param page
   * @return
   */
  PageResult<OrderVO> getOrderListVo(CommonPage page);

  /**
   * 获取订单详情
   *
   * @param orderId 订单id
   * @return 订单详情vo
   */
  OrderDetailVO getOrderDetail(Integer orderId);

  /**
   * 获取订单可操作的选项
   *
   * @param orderStatus 订单状态
   * @return 可操作选项列表
   */
  OrderHandleOptionVO getOrderHandleOption(Integer orderStatus);

  //  暂时不知道干屌的
  OrderTextCodeVO getOrderTextCode(Integer orderStatus);

  /**
   * 逻辑删除订单
   *
   * @param dto dto对象
   * @return 逻辑删除行数
   */
  int deleteOrder(DeleteOrderDTO dto);

  /**
   * 获取订单类型数值对象
   *
   * @return 订单类型数值对象
   */
  OrderCountVO getOrderCount();
  /**
   * 关闭订单
   *
   * @param dto dto对象
   * @return 关闭订单行数
   */
  int cancelOrder(DeleteOrderDTO dto);

  /**
   * 确认收货
   *
   * @param orderId 订单id
   * @return 确认收货成功
   */
  int confirm(Integer orderId);

  /**
   * 更新免费的订单
   *
   * @param orderId 订单 id
   */
  WxSimulationPayVO updateFreeOrder(Integer orderId);
}
